參考文件都看了,接著試用其它效能測試工具。 (沒先多規劃 Lab 題材的缺點)
apt-get install fio
先照抄一串試一下練習機的兩顆 SSD (這寫 --filename
超毛的)
~# fio --filename=/dev/nvme0n1 --direct=1 --rw=randrw --ioengine=libaio --bs=4k --rwmixread=100 --iodepth=16 --numjobs=16 --runtime=60 --group_reporting --name=4ktest
4ktest: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
...
fio-3.33
Starting 16 processes
Jobs: 16 (f=16): [r(16)][100.0%][r=1574MiB/s][r=403k IOPS][eta 00m:00s]
4ktest: (groupid=0, jobs=16): err= 0: pid=31186: Sun Sep 22 19:20:30 2024
read: IOPS=403k, BW=1574MiB/s (1650MB/s)(92.2GiB/60002msec)
~中略~
Run status group 0 (all jobs):
READ: bw=1574MiB/s (1650MB/s), 1574MiB/s-1574MiB/s (1650MB/s-1650MB/s), io=92.2GiB (99.0GB), run=60002-60002msec
Disk stats (read/write):
nvme0n1: ios=24094598/104, merge=0/0, ticks=14991772/105436, in_queue=15097210, util=99.83%
~# fio --filename=/dev/sda --direct=1 --rw=randrw --ioengine=libaio --bs=4k --rwmixread=100 --iodepth=16 --numjobs=16 --runtime=60 --group_reporting --name=4ktest
4ktest: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
...
fio-3.33
Starting 16 processes
Jobs: 16 (f=16): [r(16)][100.0%][r=381MiB/s][r=97.5k IOPS][eta 00m:00s]
4ktest: (groupid=0, jobs=16): err= 0: pid=30268: Sun Sep 22 19:15:29 2024
read: IOPS=97.3k, BW=380MiB/s (398MB/s)(22.3GiB/60002msec)
~中略~
Run status group 0 (all jobs):
READ: bw=380MiB/s (398MB/s), 380MiB/s-380MiB/s (398MB/s-398MB/s), io=22.3GiB (23.9GB), run=60002-60002msec
Disk stats (read/write):
sda: ios=5814582/642, merge=2/13, ticks=3733094/566, in_queue=3733670, util=99.87%
找其它範例及文件來練
fio -name=randread -direct=1 -iodepth=64 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sdb
fio -name=randwrite -direct=1 -iodepth=64 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sdb
fio -name=read -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sdb
fio -name=write -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sdb
搭配 man fio
確認一下:
-runtime=1000
:跑一千秒。-rw
或是 -readwrite
: Type of I/O pattern. 上面試了其中四項,還有其它的可試:
read
:Sequential reads.write
:Sequential writes.randread
:Random reads.randwrite
:Random writes.--direct=1
:使用 non-buffered I/O ,和用 hdparm 時類似。If value is true, use non-buffered I/O. This is usually O_DIRECT. Note that OpenBSD and ZFS on Solaris don't support direct I/O. On Windows the synchronous ioengines don't support direct I/O. Default: false.
–name=
:這隻 job 的命名。(再深入應用時會區分 job)–group_reporting
:跑多個 job 時–numjobs=
:可同時跑多個 job再來這些可以依情境調整 (模擬不同工作模式的負載)
-ioengine=libaio
:-iodepth=
:同一時間有多少 I/O 在做存取? 和 libaio引擎有關。bs=4k
:blocksize 。可用 fdisk -l
看測試的磁碟看一下原生大小。若分割時會去考量 blocksize 要切多大、日後常讀寫的檔案大小,可做調整。-filename
: 許多人的心得都認為要小心 (兩顆 SSD 內的資料沒事,可能是沒做 random write,以及還留著大半空間沒分割?)dd
搭配 time
的方式也常有人用,看起來是真的要在各個磁碟實際寫檔案,日後再練習了。
fio
dd
相關六日一起出,也就給自已挑戰30篇文。